package com.cs.beneficios.business.entity;
import com.cs.beneficios.business.model.CondicionConsultaVO;
import com.cs.beneficios.business.model.ReporteGrupoFamiliarVO;
import com.cs.beneficios.business.model.ReporteTotalGrupoFamiliarVO;
import com.cs.beneficios.business.model.SubProgramaVO;
import com.cs.beneficios.common.ConnectionFactory;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import oracle.jdbc.OracleTypes;

public class ReporteTotalGrupoFamiliarDAO
{
  /**
   * Conexion a la base de datos.
   */
  private Connection conn = null;
  private ConnectionFactory cf;
  
  /**
   * Constructor que inicializa la conexion con la base de datos.
   * @param conn Conexion con la base de datos.
   */
   
  public ReporteTotalGrupoFamiliarDAO(ConnectionFactory cf)
  {
    this.cf = cf;
    try{
      this.conn = this.cf.getConnection();
    }catch(SQLException e){}
  }
  
 /**
   * M�todo que me devuelve la informaci�n para el reporte Grupo Familiar
   * @param criterea
   * @param lFilters
   * @return 
   * @throws java.sql.SQLException
   */
  public Collection getReportGrupoFamiliar(ReporteGrupoFamiliarVO criterea, List lFilters )throws SQLException
  {
    String filtros = " ";
      
    if(lFilters != null && lFilters.size() != 0)
    {
        CondicionConsultaVO objCondConsVO = new CondicionConsultaVO();
        for(int i=0;i<lFilters.size();i++)
        {
          objCondConsVO = (CondicionConsultaVO)lFilters.get(i);
          if(objCondConsVO.getFiltro().equals("Entre"))
          {
            filtros += "AND "+objCondConsVO.getCodcampo()+" "+objCondConsVO.getCodfiltro()+" "+objCondConsVO.getValor()+" AND "+objCondConsVO.getValor2()+" ";
          }else
          {
            if(!objCondConsVO.getCodcampo().equals("NUMERO_BENEFICIOS"))
            {
              filtros += "AND UPPER("+objCondConsVO.getCodcampo()+" ) "+objCondConsVO.getCodfiltro()+" ''"+objCondConsVO.getValor().toUpperCase()+"'' ";  
            }else
            {
              if(objCondConsVO.getFiltro().equals("Entre"))
                filtros += "AND NUMERO_BENEFICIOS"+objCondConsVO.getCodfiltro()+" "+objCondConsVO.getValor()+" AND "+objCondConsVO.getValor2()+" ";
              else
                filtros += "AND NUMERO_BENEFICIOS"+objCondConsVO.getCodfiltro()+" "+objCondConsVO.getValor();;
            }
          }
        }
    }
    
    String Desde = criterea.getDesde();
    String Hasta = criterea.getHasta();
    
    if(Desde != null){
        Desde = "'"+Desde+"'";
    }
    
    if(Hasta != null){
        Hasta = "'"+Hasta+"'";
    }
    
    String strSql = "{call beneficios.PCS_REPORTE_GRUPO_FAMILIAR("+criterea.getCodeComuna()+","+criterea.getCodeZona()+"," +
              criterea.getCodeBarrio()+", "+criterea.getCodeSubprograma()+","+criterea.getCodePrograma()+", "+Desde+", " +
              Hasta+", '"+filtros+"', ?)}";
    String strAnterior = "";
    int iCount = 0;
    
    CallableStatement stmt = conn.prepareCall(strSql);
    stmt.registerOutParameter(1, OracleTypes.CURSOR);
    stmt.execute();
    
    ResultSet rst = (ResultSet)stmt.getObject(1);
    ArrayList lResults = new ArrayList();
    ReporteTotalGrupoFamiliarVO objReportVO = null;

    while ( rst.next() ) 
    {
        objReportVO = new ReporteTotalGrupoFamiliarVO();
        objReportVO.setNombreGrupoFamiliar(rst.getString("NAME_GRUPOFAM"));
        objReportVO.setCodeGrupoFamiliar(rst.getString("CODE_GRUPOFAM"));
        objReportVO.setNombreJefeHogar(rst.getString("NAME1_BENE")+" "+rst.getString("NAME2_BENE")
                                       +" "+rst.getString("APE1_BENE")+" "+rst.getString("APE2_BENE"));
        objReportVO.setCodeJefeHogar(rst.getString("CODE_BENE"));
        objReportVO.setParentesco(rst.getString("PARENTESCO"));
        objReportVO.setNombreComuna(rst.getString("NAME_COMUNA"));
        objReportVO.setNombreZona(rst.getString("NAME_ZONA"));
        objReportVO.setNombreBarrio(rst.getString("NAME_BARRIO"));
        objReportVO.setNumeroBeneficios(rst.getString("NUMERO_BENEFICIOS"));
        objReportVO.setNumeroMiembros(rst.getString("NUMERO_MIEMBROS"));
        
        //lResults.add(objReportVO);
        if(!strAnterior.equals(rst.getString("NAME_GRUPOFAM")))
        {
            iCount+=1;
            strAnterior = rst.getString("NAME_GRUPOFAM");
            lResults.add(objReportVO);
        }

        objReportVO=null;
    }
    if(iCount > 0)
    {
        objReportVO = new ReporteTotalGrupoFamiliarVO();
        objReportVO.setNombreGrupoFamiliar("TOTAL GRUPO FAMILIAR");
        lResults.add(objReportVO);
        
        objReportVO = new ReporteTotalGrupoFamiliarVO();
        objReportVO.setNombreGrupoFamiliar(String.valueOf(iCount));
        lResults.add(objReportVO);
    }
    rst.close();
    return lResults;
  }
  
  /**
   * M�todo para obtener el numero de beneficios por Grupo Familiar sin tener
   * en cuenta condiciones
   * @param strCode
   * @return 
   * @throws java.sql.SQLException
   */
  public String getNumberBeneficios(String strCode) throws SQLException 
  {
    String query = "SELECT COUNT(1) NumeroBene "+
                   "FROM (SELECT DISTINCT BENEGF.GF_CODIGO, BENEOTOR.SBPR_CODIGO, BENEOTOR.FECHA_BENEFICIO, "+
                   "	    BENEOTOR.BEN_CODIGO "+
                   "      FROM TCS_BEN_BENEF_GRUPO_FAMILIAR BENEGF, TCS_BEN_BENEFICIO_OTORGADO BENEOTOR "+
                   "      WHERE BENEGF.BEN_CODIGO = BENEOTOR.BEN_CODIGO "+
                   "      AND BENEOTOR.FECHA_BENEFICIO < SYSDATE "+
                   "      AND BENEGF.GF_CODIGO = "+strCode+")";
    /*               
    String query = "SELECT COUNT(1) NumeroBene "+
                   "FROM (SELECT DISTINCT BENEGF.GF_CODIGO, BENEOTOR.SBPR_CODIGO "+
                   "      FROM TCS_BEN_BENEF_GRUPO_FAMILIAR BENEGF, TCS_BEN_BENEFICIO_OTORGADO BENEOTOR "+
                   "      WHERE BENEGF.BEN_CODIGO = BENEOTOR.BEN_CODIGO "+
                   "      AND BENEGF.GF_CODIGO = "+strCode+")";*/
    //System.out.println(query);
    String strCount = null;
    ResultSet rslt = null;
    rslt = cf.getRecordsRset(query,null,conn);
    if(rslt.next())
    {
      strCount = rslt.getString("NumeroBene");
    }
    rslt.close();
    return strCount;
  }
  
  /**
   * M�todo para obtener el numero de beneficios por Grupo Familiar teniendo
   * en cuenta condiciones 
   * @param strCode
   * @param Condition
   * @return 
   * @throws java.sql.SQLException
   */
  /*public String getNumberBeneficiosCondition(String strCode, String Condition) throws SQLException 
  {
    String query = "SELECT * FROM (SELECT COUNT(1) NumBene "+
                   "FROM (SELECT DISTINCT BENEGF.GF_CODIGO, BENEOTOR.SBPR_CODIGO, BENEOTOR.FECHA_BENEFICIO, BENEOTOR.BEN_CODIGO "+
                   "      FROM TCS_BEN_BENEF_GRUPO_FAMILIAR BENEGF, TCS_BEN_BENEFICIO_OTORGADO BENEOTOR "+
                   "		  WHERE BENEGF.BEN_CODIGO = BENEOTOR.BEN_CODIGO	"+
                   "      AND BENEOTOR.FECHA_BENEFICIO < SYSDATE "+
                   "      AND BENEGF.GF_CODIGO = "+strCode+")) CANTIDAD "+
                   "WHERE CANTIDAD.NumBene "+Condition;
                   
    String query = "SELECT * FROM (SELECT COUNT(1) NumBene "+
                   "FROM (SELECT DISTINCT BENEGF.GF_CODIGO, BENEOTOR.SBPR_CODIGO "+
                   "      FROM TCS_BEN_BENEF_GRUPO_FAMILIAR BENEGF, TCS_BEN_BENEFICIO_OTORGADO BENEOTOR "+
                   "		  WHERE BENEGF.BEN_CODIGO = BENEOTOR.BEN_CODIGO	"+
                   "      AND BENEGF.GF_CODIGO = "+strCode+")) CANTIDAD "+
                   "WHERE CANTIDAD.NumBene "+Condition;
    //System.out.println(query);
    String strCount = null;
    ResultSet rslt = null;
    rslt = cf.getRecordsRset(query,null,conn);
    if(rslt.next())
    {
      strCount = rslt.getString("NumBene");
    }else
    {
      strCount = "0";
    }
    rslt.close();
    return strCount;
  }*/
  
  /**
   * M�todo que me devuelve la informaci�n detallada del grupo familiar
   * @param strCode
   * @return 
   * @throws java.sql.SQLException
   */
  public Collection getIndividualReport(String strCode) throws SQLException 
  {
    
    String query = "SELECT DISTINCT BENEGF.GF_CODIGO CodeGrupoFam, GRUPOFAM.NOMBRE NomGrupoFam, BENEGF.BEN_CODIGO CodeBene, "+
                   "BENE.PRIMER_NOMBRE Nom1Bene, NVL(BENE.SEGUNDO_NOMBRE,' ') Nom2Bene, BENE.PRIMER_APELLIDO Ape1Bene, "+
                   "NVL(BENE.SEGUNDO_APELLIDO,' ') Ape2Bene, VFLEXPAREN.NOMBRE Parentesco, BENEOTOR.SBPR_CODIGO CodeSubpro, "+
                   "SUB.NOMBRE NomSub, PRO.CODIGO CodeProg, PRO.NOMBRE NomProg "+
                   "FROM TCS_BEN_BENEF_GRUPO_FAMILIAR BENEGF, TCS_BEN_BENEFICIO_OTORGADO BENEOTOR, TCS_BEN_SUBPROGRAMA SUB, "+
                   "TCS_BEN_GRUPO_FAMILIAR GRUPOFAM, TCS_BEN_BENEFICIARIO BENE, PAOYER.TCS_VALOR_FLEXIBLE VFLEXPAREN, "+
                   "TCS_BEN_PROGRAMA PRO "+
                   "WHERE BENEOTOR.BEN_CODIGO (+)= BENEGF.BEN_CODIGO "+
                   "AND SUB.CODIGO (+)= BENEOTOR.SBPR_CODIGO "+
                   "AND PRO.CODIGO (+)= SUB.PRG_CODIGO "+
                   "AND BENEGF.GF_CODIGO = GRUPOFAM.CODIGO "+
                   "AND BENEGF.BEN_CODIGO = BENE.CODIGO "+
                   "AND BENEGF.VFL_CODIGO_PARENTESCO = VFLEXPAREN.CODIGO "+
                   "AND BENEGF.GF_CODIGO = "+strCode;
    
    //System.out.println(query);
    String strCount = null;
    ResultSet rslt = null;
    rslt = cf.getRecordsRset(query,null,conn);
    ResultSet rst = null;
    ArrayList lResults = new ArrayList();
    rst = cf.getRecordsRset(query,null,conn);
    ReporteTotalGrupoFamiliarVO objReportVO = null;
    while ( rst.next() ) 
		{
      objReportVO = new ReporteTotalGrupoFamiliarVO();
      objReportVO.setNombreGrupoFamiliar(rst.getString("NomGrupoFam"));
      objReportVO.setCodeGrupoFamiliar(rst.getString("CodeGrupoFam"));
      objReportVO.setNombreJefeHogar(rst.getString("Nom1Bene")+" "+rst.getString("Nom2Bene")
                                     +" "+rst.getString("Ape1Bene")+" "+rst.getString("Ape2Bene"));
      objReportVO.setCodeJefeHogar(rst.getString("CodeBene"));
      objReportVO.setParentesco(rst.getString("Parentesco"));
      objReportVO.setNombrePrograma(rst.getString("NomProg"));
      objReportVO.setNombreSubprograma(rst.getString("NomSub"));
      
      lResults.add(objReportVO);
      objReportVO=null;
    }
    
    rst.close();
    return lResults;
  }
  
  /**
   * M�todo que me devuelve la informaci�n para el reporte total Grupo Familiar
   * @param criterea
   * @param lFilters
   * @return 
   * @throws java.sql.SQLException
   */
  public Collection getTotalReportGrupoFamiliar(ReporteGrupoFamiliarVO criterea, List lFilters )throws SQLException
  {
    /*String query = "SELECT CODE_GRUPOFAM, NAME_GRUPOFAM, CODE_BENE, "+
                  "NAME1_BENE, NAME2_BENE, APE1_BENE, APE2_BENE, "+
                  "TIPO_DOCUMENTO, NUMERO_DOCUMENTO, CODE_BARRIO, "+
                  "CODE_COMUNA, CODE_ZONA, PARENTESCO, CODE_SUBPRO, "+
                  "NAME_SUB, CODE_PROG, NAME_PROG, NAME_BARRIO, "+
                  "NAME_ZONA, NAME_COMUNA, FECHA_BENEFICIO, NUMERO_BENEFICIOS, NUMERO_MIEMBROS "+
                  "FROM BENEFICIOS.VMCS_BENE_REPORTGFCRITERIA "+
                  "WHERE 1=1 ";*/
  
     String query = "SELECT DISTINCT CODE_GRUPOFAM, NAME_GRUPOFAM, CODE_BENE, "+
                       "NAME1_BENE, NAME2_BENE, APE1_BENE, APE2_BENE, "+
                       "TIPO_DOCUMENTO, NUMERO_DOCUMENTO, CODE_BARRIO, "+
                       "CODE_COMUNA, CODE_ZONA, PARENTESCO, CODE_SUBPRO, "+
                       "NAME_SUB, CODE_PROG, NAME_PROG, NAME_BARRIO, "+
                       "NAME_ZONA, NAME_COMUNA, NUMERO_BENEFICIOS, NUMERO_MIEMBROS "+
                       "FROM BENEFICIOS.VMCS_BENE_REPORTGFCRITERIA "+
                       "WHERE 1=1 ";
                       
    String strCondition = null;
    String strAnterior = "";
    int iCount = 0;
            
    if((Object)criterea.getCodeComuna() != null)
    {
      query += " AND CODE_COMUNA = "+criterea.getCodeComuna()+" ";
    }
    if((Object)criterea.getCodeZona() != null)
    {
      query += " AND CODE_ZONA = "+criterea.getCodeZona()+" ";
    }
    if((Object)criterea.getCodeBarrio() != null)
    {
      query += " AND CODE_BARRIO = "+criterea.getCodeBarrio()+" ";
    }
    
    if((Object)criterea.getCodeSubprograma() != null)
    {
      query += " AND CODE_SUBPRO = "+criterea.getCodeSubprograma()+" ";
    }
    if((Object)criterea.getCodesSubprogramas() != null)
    {
      query += " AND CODE_SUBPRO IN ("+criterea.getCodesSubprogramas()+")";
    }
    if((Object)criterea.getCodePrograma() != null)
    {
      query += " AND CODE_PROG = "+criterea.getCodePrograma()+" ";
    }
    if((Object)criterea.getCodesProgramas() != null)
    {
      query += " AND CODE_PROG IN ("+criterea.getCodesProgramas()+")";
    }
   
    if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() != null)
    {
      query += "AND FECHA_BENEFICIO BETWEEN '"+criterea.getDesde()+"' AND '"+criterea.getHasta()+"' ";
    }
    if((Object)criterea.getDesde() != null && (Object)criterea.getHasta() == null)
    {
      query += "AND FECHA_BENEFICIO >= '"+criterea.getDesde()+"' ";
    }
    if((Object)criterea.getDesde() == null && (Object)criterea.getHasta() != null)
    {
      query += "AND FECHA_BENEFICIO <= '"+criterea.getHasta()+"' ";
    }
    
    if(lFilters != null && lFilters.size() != 0)
    {
      CondicionConsultaVO objCondConsVO = new CondicionConsultaVO();
      for(int i=0;i<lFilters.size();i++)
      {
        objCondConsVO = (CondicionConsultaVO)lFilters.get(i);
        if(objCondConsVO.getFiltro().equals("Entre"))
        {
          query += "AND "+objCondConsVO.getCodcampo()+" "+objCondConsVO.getCodfiltro()+" "+objCondConsVO.getValor()+" AND "+objCondConsVO.getValor2()+" ";
        }else
        {
          if(!objCondConsVO.getCodcampo().equals("NUMERO_BENEFICIOS"))
          {
            query += "AND UPPER("+objCondConsVO.getCodcampo()+" ) "+objCondConsVO.getCodfiltro()+" '"+objCondConsVO.getValor().toUpperCase()+"' ";  
          }else
          {
            if(objCondConsVO.getFiltro().equals("Entre"))
              query += "AND NUMERO_BENEFICIOS"+objCondConsVO.getCodfiltro()+" "+objCondConsVO.getValor()+" AND"+objCondConsVO.getValor2()+"' ";
              //strCondition = objCondConsVO.getCodfiltro()+" "+objCondConsVO.getValor()+" AND"+objCondConsVO.getValor2();
            else
              query += "AND NUMERO_BENEFICIOS"+objCondConsVO.getCodfiltro()+" "+objCondConsVO.getValor();;
              //strCondition = objCondConsVO.getCodfiltro()+objCondConsVO.getValor();
          }
        }
        
      }
    }
    
    query += " ORDER BY NAME_GRUPOFAM";
    //System.out.println(query);
    ResultSet rst = null;
    ArrayList lResults = new ArrayList();
    rst = cf.getRecordsRset(query,null,conn);
    ReporteTotalGrupoFamiliarVO objReportVO = null;
    while ( rst.next() ) 
		{
      objReportVO = new ReporteTotalGrupoFamiliarVO();
      objReportVO.setNombreGrupoFamiliar(rst.getString("NAME_GRUPOFAM"));
      objReportVO.setCodeGrupoFamiliar(rst.getString("CODE_GRUPOFAM"));
      objReportVO.setNombreJefeHogar(rst.getString("NAME1_BENE")+" "+rst.getString("NAME2_BENE")
                                     +" "+rst.getString("APE1_BENE")+" "+rst.getString("APE2_BENE"));
      objReportVO.setCodeJefeHogar(rst.getString("CODE_BENE"));
      objReportVO.setParentesco(rst.getString("PARENTESCO"));
      objReportVO.setNombreComuna(rst.getString("NAME_COMUNA"));
      objReportVO.setNombreZona(rst.getString("NAME_ZONA"));
      objReportVO.setNombreBarrio(rst.getString("NAME_BARRIO"));
      objReportVO.setNombreSubprograma(rst.getString("NAME_SUB"));
      objReportVO.setNombrePrograma(rst.getString("NAME_PROG"));
      objReportVO.setNumeroBeneficios(rst.getString("NUMERO_BENEFICIOS"));
      objReportVO.setNumeroMiembros(rst.getString("NUMERO_MIEMBROS"));
      
      lResults.add(objReportVO);
      if(!strAnterior.equals(rst.getString("NAME_GRUPOFAM")))
      {
        iCount+=1;
        strAnterior = rst.getString("NAME_GRUPOFAM");
      }
      objReportVO=null;
    }
    if(iCount > 0)
    {
      objReportVO = new ReporteTotalGrupoFamiliarVO();
      objReportVO.setNombreGrupoFamiliar("TOTAL GRUPO FAMILIAR");
      lResults.add(objReportVO);
      
      objReportVO = new ReporteTotalGrupoFamiliarVO();
      objReportVO.setNombreGrupoFamiliar(String.valueOf(iCount));
      lResults.add(objReportVO);
    }
    rst.close();
    return lResults;
  }
  
  /**
   * M�todo que me devuelve los programas y beneficios a los que tiene permiso
   * el usuario sin tener encuenta la vigencia.
   * @param codeUser
   * @param codeGus
   * @return 
   * @throws java.sql.SQLException
   */
  public Collection findProgSubprog(Long codeUser, String userGroupName, Long codeArea) throws SQLException 
  {
//    SubProgramaDAO subProDAO = new SubProgramaDAO(cf);
//    Collection subprogramas = subProDAO.findSubPrograma(new SubProgramaVO(),codeUser,userGroupName,codeArea);
    String query =  "SELECT DISTINCT pro.CODIGO codprog,pro.NOMBRE nompro,subpro.codigo codeSubprograma, "+
                    "UPPER(subpro.nombre) nomSubprograma, usu.codigo codeusu, subpro.usu_codigo adminbene, pro.usu_codigo adminpro "+
                    "FROM TCS_BEN_SUBPROGRAMA subpro, "+
                    "TCS_BEN_PROGRAMA pro, "+
                    "TCS_BEN_SUBPROGRAMA_USUARIO subus, "+
                    "paoyer.tcs_usuario usu "+
                    "WHERE pro.codigo = subpro.PRG_CODIGO "+
                    "AND (subpro.CODIGO = subus.SBPR_CODIGO OR 'ADMINISTRADOR GENERAL' = '"+userGroupName+"' OR 'SUPER USUARIO' = '"+userGroupName+"' OR subpro.usu_codigo = "+codeUser+" OR pro.usu_codigo = "+codeUser+") "+
                    "AND subus.USU_CODIGO = usu.CODIGO "+
                    "AND usu.CODIGO = "+codeUser+" "+
                    "ORDER BY nompro";
                  
    //System.out.println(query);
    ResultSet rst = null;
    ArrayList subprogramas = new ArrayList();
    rst = cf.getRecordsRset(query,null,conn);
		SubProgramaVO subpro = null;
    while ( rst.next() ) 
    {
        subpro = new SubProgramaVO();
        subpro.setCodeSubPrograma(rst.getString("codeSubprograma")); 
        subpro.setNombre(rst.getString("nomSubprograma"));
        subpro.setNombrePrograma(rst.getString("nompro"));
        subpro.setCodePrograma(new Long(rst.getString("codprog")));
        subprogramas.add(subpro);
        subpro=null;  
    }
        rst.close();
    return subprogramas;
  }
  
  /**********************************************************
   * Metodo provisional para recuperar nombres de los filtros
   * *******************************************************/
  public ReporteGrupoFamiliarVO getFilters(ReporteGrupoFamiliarVO objRgfVO) throws SQLException
  {
    String strQuery = null;
    ResultSet rst = null;
    if((objRgfVO.getCodePrograma() != null) && (objRgfVO.getCodePrograma() != new Long(0))){
      strQuery = "SELECT PROG.NOMBRE NOMBRE_PROGRAMA, SUB.NOMBRE NOMBRE_SUBPROGRAMA" +
                      " FROM TCS_BEN_PROGRAMA PROG, TCS_BEN_SUBPROGRAMA SUB" +
                      " WHERE PROG.CODIGO = SUB.PRG_CODIGO" +
                      " AND PROG.CODIGO=" + objRgfVO.getCodePrograma();
      
      if((objRgfVO.getCodeSubprograma() != null) && (objRgfVO.getCodePrograma() != new Long(0)))
      {
        strQuery += " AND SUB.CODIGO =" + objRgfVO.getCodeSubprograma();
      }
      rst = cf.getRecordsRset(strQuery,null,conn);
        
      rst.next();
      if(objRgfVO.getCodeSubprograma() != null)
        objRgfVO.setNombreSubprograma(rst.getString("NOMBRE_SUBPROGRAMA"));
        
      objRgfVO.setNombrePrograma(rst.getString("NOMBRE_PROGRAMA"));
    }
    if(objRgfVO.getCodeZona() != null || objRgfVO.getCodeComuna() != null || objRgfVO.getCodeBarrio() != null)
    {
      strQuery = "SELECT VF.NOMBRE, TV.NOMBRE N" +
                " FROM PAOYER.TCS_TIPO_VALOR_FLEX TV, PAOYER.TCS_VALOR_FLEXIBLE VF" +
                " WHERE TV.CODIGO = VF.TVF_CODIGO" +
                " AND VF.CODIGO IN (" + objRgfVO.getCodeZona() + "," + objRgfVO.getCodeComuna() + "," + objRgfVO.getCodeBarrio() + ")" +
                " ORDER BY N";
      rst = cf.getRecordsRset(strQuery,null,conn);
        
      if(objRgfVO.getCodeBarrio() != null)
      {
        rst.next();
        objRgfVO.setNombreBarrio(rst.getString("NOMBRE"));
      }
      if(objRgfVO.getCodeComuna() != null)
      {
        rst.next();
        objRgfVO.setNombreComuna(rst.getString("NOMBRE"));
      }
      if(objRgfVO.getCodeZona() != null)
      {
        rst.next();
        objRgfVO.setNombreZona(rst.getString("NOMBRE"));
      }
    }
    if(rst != null)
      rst.close();
    
    return objRgfVO;
  }
  
  public Connection getConn()
  {
    return conn;
  }
}